﻿<?php
/*
 * UserDatabase.
 *
 * Sirve como interfaz para la gestión de usuarios con la base de datos.
 */
class UserDatabase {
	
	private $database = null;
	
	/*
	 * Constructora con el conector con la base de datos.
	 * @param Database $db
	 */
	function __construct($db) {
		$this->database = $db;
	}
	
	/*
	 * Comprueba si existe un usuario con un nick dado.
	 * @param string $name
	 * @return boolean true si existe el usuario, false en caso contrario.
	 */
	public function exists($name) {
		
		$row = null;
			
		// Chequea si existe un usuario con ese nick
		$sql = "SELECT users.id FROM `users` 
			WHERE users.name = '".mysql_real_escape_string($name)."'
		";
		if ($row = mysql_fetch_array($this->database->sql($sql))) {
			return true; // ya existe un usuario con ese nick
		}
		else return false;
	}
	
	/*
	 * Comprueba que la información para el login de un usuario es correcta
	 * @param string $username
	 * @param string $password
	 * @return User Devuelve una instancia de la clase User con la información
	 *	del usuario que ha hecho login. Devuelve null si no existe.
	*/
	public function checkLogin($username, $password) {
		$row = null;
		
		$sql = "SELECT users.id FROM `users`
			WHERE users.name = '" . mysql_real_escape_string($username) . "'
				AND users.password = '" . $password . "'";
		if ($row = mysql_fetch_array($this->database->sql($sql))) {
			$user = new User($username, $password);
			$user->id = $row['id'];
			return $user;
		}
		else return null;
	}
	
	/*
	 * Añade un usuario nuevo a la tabla users de la base de datos.
	 * @param User $user
	 * @return boolean false si se ha producido 
	 *   un error en la inserción, true en caso contrario.
	 */
	public function insertUser($user) {
			
		$row = null;
			
		// Inserta el usuario en la tabla users
		$sql = "INSERT INTO `users` (`name`, `password`)
			VALUES (
			'".mysql_real_escape_string($user->name)."', 
			'".mysql_real_escape_string($user->password)."'
		)";
		if (!$this->database->sql($sql)) return false; // inserción errónea
		
		// Obtiene el id generado por la base de datos y lo guarda en el objeto user
		$sql = "SELECT users.id FROM `users` 
			WHERE users.name = '".mysql_real_escape_string($user->name)."'
		";

		if ($row = mysql_fetch_array($this->database->sql($sql))) {
			$user->id = $row['id'];
			return true;
		}
		else return false; // no se ha generado bien el id en la tabla users
	}
	
	/*
	 * Borra un usuario de la tabla users de la base de datos.
	 * @param User $user
	 * @return boolean false si no existe el usuario o hay un error en el borrado 
	 *   true en caso contrario.
	 */
	public function removeUser($user) {
			 
		$sql ="DELETE FROM `users`
			WHERE `id` = '".mysql_real_escape_string($user->id)."' and `name` = '".mysql_real_escape_string($user->name)."' ";
		$this->database->sql($sql);	
	
		$sql ="DELETE FROM `votes_user_pl`
		WHERE `userId` = '".mysql_real_escape_string($$user->id)."'";
		$this->database->sql($sql);
	}
	
	/*
	 * Obtiene el usuario dado su identificador.
	 * @param integer $userId
	 * @return User Devuelve null si el usuario no existe.
	 */
	public function getUserById($userId) {
	
		$user = null;
	
		$sql = "SELECT users.name FROM `users` 
			WHERE users.id = '".mysql_real_escape_string($userId)."'
		";
	
		if ($row = mysql_fetch_array($this->database->sql($sql))) {
			$user = new User();
			$user->id = $userId;
			$user->name = $row['name'];
		}
		
		return $user;
	}
	
	/*
	 * Obtiene el usuario dado su nick.
	 * @param string $userName
	 * @return User Devuelve null si el usuario no existe.
	 */
	public function getUserByName($userName) {
	
		$user = null;
	
		$sql = "SELECT users.id FROM `users` 
			WHERE users.name = '".mysql_real_escape_string($userName)."'
		";
	
		if ($row = mysql_fetch_array($this->database->sql($sql))) {
			$user = new User();
			$user->id = $row['id'];
			$user->name = $userName;
		}
		
		return $user;
	}
	
	/*
	 * Actualiza todos los campos de un usuario en la tabla users a partir de su id.
	 * @param string $user
	 * @return boolean Devuelve falso si se ha producido un error en la actualización.
	 */
	public function updateUser($user) {
		
		$sql ="UPDATE `users` SET `name`='".mysql_real_escape_string($user->name)."'
			WHERE `id` = '".mysql_real_escape_string($user->id)."'";
		return $this->database->sql($sql);
	}
	
	/*
	 * Actualiza el campo name de un usuario en la tabla users a partir de su id.
	 * @param string $user Para obtener el id.
	 * @param string $userName 
	 * @return boolean Devuelve falso si se ha producido un error en la actualización.
	 */
	public function updateUserName($user,$userName) {
		
		$sql ="UPDATE `users` SET `name`='".mysql_real_escape_string($userName)."'
			WHERE `id` = '".mysql_real_escape_string($user->id)."'";
		return $this->database->sql($sql);
	}
}
?>